function $(arg) {
	return new JQ(arg);
}

// 通过构造函数JQ创建出来的对象都继承于JQ.prototype(爹) 继承于 Array.prototype(爷) 继承于 Object.prototype(祖父) 继承于 null
JQ.prototype = Array.prototype;

// 构造函数
function JQ(arg) {
	// this.elements = [];
	// 如果传入的是dom对象
	if (typeof arg == "object") {
		this.push(arg);
	} else if (typeof arg == "function") {
		// 如果传入的参数为函数, 就让该函数在DOM加载完成后执行
		// DOM文档加载步骤
		// 1. 解析HTML结构
		// 2. 加载外部脚本和样式表文件
		// 3. 解析并执行脚本代码
		// 4. DOM树构建完成 document.addEventListener("DOMContentLoaded", arg, false);
		// 5. 加载图片等外部文件
		// 6. 页面加载完毕  window.onload
		document.addEventListener("DOMContentLoaded", arg, false);
	} else {
		getElements.call(this, arg);
	}
}

// 通过选择器获取元素
function getElements(selector) {
	if (typeof selector != "string") return;
	var elements = document.querySelectorAll(selector);
	for (var i = 0; i < elements.length; i++) {
		this.push(elements[i]);
	}
}


JQ.prototype.css = function() {
	// [div#box] backgroundColor
	if (arguments.length > 2 || arguments.length == 0) return;
	if (arguments.length == 1) {
		if (typeof arguments[0] == "string") {
			// background
			var str = arguments[0];
			var result = getComputedStyle(this[0], null)[str];
			return result;
		}
		if (typeof arguments[0] == "object") {

			var obj = arguments[0];

			for (var i = 0; i < this.length; i++) {
				var ele = this[i];
				for (var key in obj) {
					ele.style[key] = obj[key];
				}
			}
			// 方法里返回对象本身就可以进行链式操作
			return this;
		}
	} else {

		if (typeof arguments[0] != "string" || typeof arguments[1] != "string") return;
		var key = arguments[0];
		var value = arguments[1];
		this.forEach(function(ele, index) {
			ele.style[key] = value;
		});
		return this;
	}

};

JQ.prototype.eq = function(index) {
	if (typeof index != "number") return;
	var ele = this[index];
	// 清空数组
	this.length = 0;
	this.push(ele);
	return this;
};

// 添加事件
JQ.prototype.on = function(eventType, func, bubble) {
	bubble = bubble ? true : false;
	this.forEach(function(ele) {
		ele.addEventListener(eventType, func, bubble);
	});
	return this;
};






